package com.fml.leecode.eaysy;

import java.util.ArrayList;
import java.util.List;
import java.util.Stack;

/*给你一个仅由 大写 英文字符组成的字符串 s 。

你可以对此字符串执行一些操作，在每一步操作中，你可以从 s 中删除 任一个 "AB" 或 "CD" 子字符串。

通过执行操作，删除所有 "AB" 和 "CD" 子串，返回可获得的最终字符串的 最小 可能长度。

注意，删除子串后，重新连接出的字符串可能会产生新的 "AB" 或 "CD" 子串。



示例 1：

输入：s = "ABFCACDB"
输出：2
解释：你可以执行下述操作：
- 从 "ABFCACDB" 中删除子串 "AB"，得到 s = "FCACDB" 。
- 从 "FCACDB" 中删除子串 "CD"，得到 s = "FCAB" 。
- 从 "FCAB" 中删除子串 "AB"，得到 s = "FC" 。
最终字符串的长度为 2 。
可以证明 2 是可获得的最小长度*/
public class Demo2696 {

    public static void main(String[] args) {

        System.out.println("a".concat("b"));
        String s = "ABFCACDB";

        int i = minLength02(s);
        System.out.println("i: " + i);

    }

    public static int minLength(String s) {
        // AB CD ABCD  ACDB CABD AABB CCDD AACDBB CCABDD

        String AB = "AB";
        String CD = "CD";

        while (s.contains(AB) || s.contains(CD)) {
            s = s.replace(AB, "").replace(CD, "");
        }

        int num = s.length();


        return num;
    }

    public static int minLength02(String s) {

        List<Character> list = new ArrayList<Character>();
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            list.add(c);

            int m = list.size();

            if (m>=2 &&
                    (list.get(m-2) == 'A' && list.get(m-1) == 'B' ||
                    list.get(m-2) == 'C' && list.get(m-1) == 'D')){
                list.remove(m - 1);
                list.remove(m - 2);
            }

        }
        return list.size();
    }



}
